As is well known, demands for optically storing a large amount of data, such as data for a motion picture film, have been increasing. Therefore, various types of volume holographic data storage (VHDS) system incorporating therein a storage medium have been recently developed for realizing high density optical storage capabilities.
In the VHDS system, source data is segmented into blocks of N data bits, which are also called information bits or message bits, each block capable of representing any of 2N distinct messages, N being a positive integer. An encoder in the VHDS system transforms each N-bit data block into a larger block of (N+K) bits, called code bits or channel symbols, K being another integer. The K bits, which the encoder adds to each data block, are called redundant bits, parity bits or check bits: they carry no new information. The code is referred to as an (N+K, N) code. The ratio of redundant bits to data bits, K/N, within a block is called redundancy of the code and the ratio of data bits to total bits, N/(N+K), is called a code rate. The code rate may be thought of as the portion of code bits that constitutes information. For example, in a code rate ⅓ code, each code bit carries ⅓ bit of information. If, for example, an error control technique employs a code rate ⅓, the bandwidth expansion is 3.
In other words, the encoder transforms a block of N message digits (a message vector) into a longer block of N+K codeword digits (a code vector), constructed from a given alphabet of elements. When the alphabet consists of two elements (0 and 1), the code is a binary code comprised of binary digits (bits). The explanation provided herein will be confined to binary codes, unless otherwise noted.
The N-bit message forms 2N distinct message sequences referred to as N-tuples (sequences of N digits). The (N+K)-bit blocks can form as many as 2N+K distinct sequences, referred to as (N+K)-tuples. The encoding procedure assigns to each of the 2N message N-tuples different one of the 2N+K (N+K)-tuples. A block code represents a one-to-one assignment, whereby the 2N message N-tuples are uniquely mapped into a new set of 2N codeword (N+K)-tuples; and the mapping can be accomplished via a look-up table.
In the decoding mode, a multiplicity of decoding algorithms has been used in order to increase the code rate while decreasing the bit error rate.
In a threshold decoding algorithm, a threshold, e.g., an average value or a predetermined value such as 0.5, may be used to assign ‘0’ or ‘1’ to a retrieved or transmitted signal disturbed by channel distortion. In a conventional VHDS system, Gaussian distribution characteristics of a laser beam, lens distortions, scattering and diffraction in the system and so on may be appreciated as a channel. The threshold decoding algorithm has a higher code rate, but also has a higher bit error rate, especially, in case of a lower intensity of laser beam.
An improvement in the bit rate error may be realized by using a local threshold decoding algorithm. The local threshold decoding algorithm divides a decoding region into a plurality of local regions and applies a different threshold for each local region so as to determine ‘0’ or ‘1’. The local threshold decoding algorithm however has a low compatibility because each of the VHDS systems has intrinsic noise patterns different from each other.
Another improvement may be realized by using a binary differential coding/decoding algorithm. The binary differential decoding algorithm takes advantage of a characteristic that a signal for representing ‘1’ is always larger than a signal for representing its nearest ‘0’. For example, ‘0’ and ‘1’ are replaced with ‘01’ and ‘10’, respectively, during encoding and its reverse algorithm is used to decode a transmitted signal. The binary differential decoding algorithm has a lower bit error rate, but its code rate is also considerably (50%) decreased.
Another improvement may be achieved by employing a balanced block coding/decoding algorithm. In encoding, an input message is divided into a plurality of message P-tuples, P being a positive integer and each message P-tuple is encoded with a codeword 2Q-tuple having an equal number of bit “0's” and bit “1's”, Q being an integer and 2Q being larger than P. In decoding, a transmitted signal is divided into a plurality of codeword 2Q-tuples; and Q number of smaller and greater received values for each codeword 2Q-tuple are reconstructed as “0's” and “1's”, respectively.
For example, in a 6:8 balanced block coding/decoding algorithm, 26(=64) 8 bit codewords which have a same number, i.e., 4, of “0” and “1” bits among 28(=256) 8 bit codewords are selected to encode 64 message 6-tuples. For instance, 64 balanced blocks selected among 8C4(=70) 8 bit codewords are used to represent 64 original message blocks of 6-tuples.
Also, in an 8:12 balanced block coding/decoding algorithm, 28(=256) codeword 12-tuples which have a same number, i.e., 6, of “0” and “1” bits among 212(=4096) 12 bit codewords are selected to encode 256 message 8-tuples. For instance, one of 256 codewords selected from 12C6(=924) codeword 12-tuples is used to represent an original block of 8-bit message.
The 6:8 balanced block coding algorithm has a code rate ¾(75%) since the 6:8 balanced block has 2 redundant bits added to 6 data bits. And, the 8:12 balanced block coding algorithm has a code rate ⅔(=66.7%), since the 8:12 balanced block has 4 redundant bits to 8 data bits. The balanced block coding algorithm has a lower bit error rate and a higher code rate than the binary differential coding algorithm; however, a still higher code rate is required to use a limited channel resource effectively.